package Interface.Game;

import Interface.JSelect;
import Interface.Player.JPanelPlayerSettings;
import Jastermind.Appli;
import Jastermind.Data;
import Jastermind.Game;
import Jastermind.Player;
import Various.ClosePanelAction;
import Various.Tools;
import Various.VerifSaisie;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class JPanelGameSettings extends JPanel {
    
    private JSelect selectJoueur;
    private JLabel jblValJoueur;
    private JPanel jpCardPlayers;
    private JButton jbtStart;

    public JPanelGameSettings() {
        super();
        this.setLayout(null);
        
        //*********************** Dimension***********************
        //En cas d'évolution de taille
        int jElementWidth = 150;
        int jElementHeight = 20;
        int posYStart = 30;
        int posXLabel = 40;
        int posXField = posXLabel + jElementWidth;
        int posXVerif = posXField + jElementWidth + 5;

        //*********************** Titre ***********************

        JLabel jblTitre = new JLabel("Paramètre de la partie ");
        jblTitre.setBounds(125, 0, 200, 20);
        this.add(jblTitre);

        //*********************** Joueur ***********************

        //Label joueur
        JLabel jblJoueur = new JLabel("Choix du joueur : ");
        jblJoueur.setBounds(posXLabel, posYStart, jElementWidth, jElementHeight);
        this.add(jblJoueur);

        //Add joueur
        JButton jbtAddJoueur = new JButton(new ImageIcon("./images/add.jpg"));
        jbtAddJoueur.setBackground(Color.WHITE);
        jbtAddJoueur.setToolTipText("Ajouter un joueur");
        jbtAddJoueur.setBounds(posXField - 30, jblJoueur.getY(), 30, jElementHeight);
        jbtAddJoueur.setActionCommand("ajoutJoueur");
        jbtAddJoueur.addActionListener(new ActionJPGameSettings());
        this.add(jbtAddJoueur);

        //Select joueur
        selectJoueur = new JSelect("Sélection du joueur ");
        selectJoueur.setBounds(posXField, jblJoueur.getY(), jElementWidth, jElementHeight);
        selectJoueur.setListeDonnees(Data.getUniqueInstance().getListPlayers());
        selectJoueur.addItemListener(new ActionJPGameSettings());
        this.add(selectJoueur);

        //Validation joueur
        jblValJoueur = new JLabel(VerifSaisie.imgPasOk);
        jblValJoueur.setBounds(posXVerif, jblJoueur.getY(), 30, jElementHeight);
        this.add(jblValJoueur);

        //*********************** Panel config joueur ***********************
        jpCardPlayers = new JPanel();
        jpCardPlayers.setLayout(new CardLayout());
        jpCardPlayers.setBounds(0,selectJoueur.getY(),Appli.getJfMain().getWidth(),Appli.getJfMain().getHeight()-150);
        JPanel jpNoPlayer=new JPanel();
        jpCardPlayers.add(jpNoPlayer,"noPlayer");
        for(int iPlayer=0;iPlayer<Data.getUniqueInstance().getListPlayers().size();iPlayer++){
            JPanelPlayerSettings jpPlayer=new JPanelPlayerSettings(Data.getUniqueInstance().getListPlayers().get(iPlayer));
            jpCardPlayers.add(jpPlayer,Data.getUniqueInstance().getListPlayers().get(iPlayer).getName());
        }
        this.add(jpCardPlayers);

        jbtStart = new JButton("Commencer");
        jbtStart.setBounds(70, Appli.getJfMain().getHeight() - 100, 120, 30);
        jbtStart.setEnabled(false);
        jbtStart.addActionListener(new ActionJPGameSettings());
        this.add(jbtStart);

        JButton jbtRetour = new JButton("Fermer");
        jbtRetour.addActionListener(new ClosePanelAction());
        jbtRetour.setBounds(jbtStart.getX() + 130, Appli.getJfMain().getHeight() - 100, 120, 30);
        this.add(jbtRetour);
    }
    public JSelect getSelectJoueur() {
        return selectJoueur;
    }
    public void setisModifColor(boolean isEnabled){
        ((JPanelPlayerSettings)Tools.getComponentShown(jpCardPlayers)).getJbtSauvegarder().setEnabled(isEnabled);
    }


  
    //*********************** Evènements ***********************

    private class ActionJPGameSettings extends KeyAdapter implements ActionListener, ItemListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("ajoutJoueur")) {
                Player.addJoueur();
                 selectJoueur.setListeDonnees(Data.getUniqueInstance().getListPlayers());
                Appli.getJfMain().setJPContent(new JPanelGameSettings());
            }
            if(e.getActionCommand().equals("Commencer")){
                Appli.getJfMain().setMenuEnabled(false);
                Appli.getJfMain().setJPContent(new JPanelGame(new Game(((Player)selectJoueur.getSelectedItem()))));
            }
        }
        public void itemStateChanged(ItemEvent e) {
            CardLayout cardLayout = (CardLayout)(jpCardPlayers.getLayout());
            if (e.getStateChange() == ItemEvent.SELECTED) {
                if (VerifSaisie.isSelectOk(selectJoueur)) {
                     jblValJoueur.setIcon(VerifSaisie.imgOk);
                     jbtStart.setEnabled(true);
                     cardLayout.show(jpCardPlayers,((Player)selectJoueur.getSelectedItem()).getName());
                }
                else {
                    jblValJoueur.setIcon(VerifSaisie.imgPasOk);
                    jbtStart.setEnabled(false);
                    cardLayout.show(jpCardPlayers,"noPlayer");
                }
            }
        }
    }
}

